Introduce dom0 to the store.
authorcl349@firebug.cl.cam.ac.uk <cl349@firebug.cl.cam.ac.uk>
Wed, 27 Jul 2005 18:31:18 +0000 (18:31 +0000)
committercl349@firebug.cl.cam.ac.uk <cl349@firebug.cl.cam.ac.uk>
Wed, 27 Jul 2005 18:31:18 +0000 (18:31 +0000)
Signed-off-by: Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
tools/python/xen/xend/XendDomain.py
tools/python/xen/xend/XendDomainInfo.py

index ed3f503292ac59cea13aec4de457a8e6c36f9306..157d2216cfba4f8f5cf5e91143ca72259bf0cc39 100644 (file)
@@ -55,10 +55,6 @@ class XendDomain:
         eserver.subscribe('xend.virq', self.onVirq)
         self.initial_refresh()
 
-        dom0 = self.domain_lookup(0)
-        if not dom0:
-            dom0 = self.domain_unknown(0)
-
     def list(self):
         """Get list of domain objects.
 
@@ -117,6 +113,11 @@ class XendDomain:
                 self._delete_domain(domid)
         self.refresh(cleanup=True)
 
+        dom0 = self.domain_lookup(0)
+        if not dom0:
+            dom0 = self.domain_unknown(0)
+        dom0.dom0_init_store()    
+
     def close(self):
         pass
 
index b193cdde66e2fc55b606e97631c49a277ff334e9..5859905b3d416b96a4fd9912eb6bea6eb1459b24 100644 (file)
@@ -164,13 +164,13 @@ class XendDomainInfo:
         """
         dom = info['dom']
         vm = cls(db)
+        vm.setdom(dom)
         db.readDB()
         vm.importFromDB()
         config = vm.config
         log.debug('info=' + str(info))
         log.debug('config=' + prettyprintstring(config))
 
-        vm.setdom(dom)
         vm.memory = info['mem_kb']/1024
 
         if config:
@@ -283,6 +283,7 @@ class XendDomainInfo:
 
     def importFromDB(self):
         self.db.importFromDB(self, fields=self.__exports__)
+        self.store_channel = self.eventChannel("store_channel")
 
     def setdom(self, dom):
         """Set the domain id.
@@ -983,6 +984,18 @@ class XendDomainInfo:
             return 0
         return timeout - (time.time() - self.shutdown_pending['start'])
 
+    def dom0_init_store(self):
+        if not self.store_channel:
+            self.store_channel = self.eventChannel("store_channel")
+        self.store_mfn = xc.init_store(self.store_channel.port2)
+        if self.store_mfn >= 0:
+            try:
+                self.db.introduceDomain(self.id, self.store_mfn,
+                                        self.store_channel)
+            except:
+                pass
+        self.exportToDB(save=True, sync=True)
+
 def vm_field_ignore(vm, config, val, index):
     """Dummy config field handler used for fields with built-in handling.